package stringtbyte

import (
	"reflect"
	"unsafe"
)

func String2Bytes(s string) []byte {
	sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) // 获取到s的胖指针
	// 构造新指针
	bh := reflect.SliceHeader{
		Data: sh.Data,
		Len:  sh.Len,
		Cap:  sh.Len,
	}
	// println("引用的指针 ", &bh)
	// fmt.Println("里面的值 ", *&bh)
	// println("转化后的指针 ", (*[]byte)(unsafe.Pointer(&bh)))
	// println("转化后的值 ", *(*[]byte)(unsafe.Pointer(&bh)))
	return *(*[]byte)(unsafe.Pointer(&bh))
	// 将bh（引用类型）的指针 转化为 *[]byte（引用类型的指针） 然后再取值返回
	// 这里会警告说可能导致错误使用
}

func Bytes2String(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}
